🎖️GitЯра🎖️
src/helpers/ethernet/SerialEthernetInterface.cpp 890a2e2cffa98dea3ca88db3c3aba72ef23ff3f7 (890a2e2c) Text, 3.79 KB
Tff7b72#Tff7b72include T8b949e"SerialEthernetInterface.h"
Tff7b72#Tff7b72define RECV_STATE_IDLE 0
Tff7b72#Tff7b72define RECV_STATE_HDR_FOUND 1
Tff7b72#Tff7b72define RECV_STATE_LEN1_FOUND 2
Tff7b72#Tff7b72define RECV_STATE_LEN2_FOUND 3
Tffa657bool Td2a8ffSerialEthernetInterface::beginTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffSerialEthernetInterface::enableTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_isEnabledTb4b4b4) Tff7b72returnTb4b4b4;
Te6edf3_isEnabled Tff7b72= Tffa657trueTb4b4b4;
Te6edf3clearBuffersTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffSerialEthernetInterface::disableTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_isEnabled Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657size_t Td2a8ffSerialEthernetInterface::writeFrameTb4b4b4(Tff7b72const Tffa657uint8_t Te6edf3srcTb4b4b4[Tb4b4b4]Tb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3len Tff7b72> Te6edf3MAX_FRAME_SIZETb4b4b4) Tb4b4b4{
Te6edf3ETHERNET_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffwriteFrame(), frame too big, len=%dTffea00\nTa5d6ff"Tb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3isConnectedTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3len Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3send_queue_len Tff7b72>Tff7b72= Te6edf3FRAME_QUEUE_SIZETb4b4b4) Tb4b4b4{
Te6edf3ETHERNET_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffwriteFrame(), send_queue is full!Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
Te6edf3send_queueTb4b4b4[Te6edf3send_queue_lenTb4b4b4]Tb4b4b4.Te6edf3len Tff7b72= Te6edf3lenTb4b4b4; T8b949e// add to send queue
Te6edf3memcpyTb4b4b4(Te6edf3send_queueTb4b4b4[Te6edf3send_queue_lenTb4b4b4]Tb4b4b4.Te6edf3bufTb4b4b4, Te6edf3srcTb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3send_queue_lenTff7b72+Tff7b72+Tb4b4b4;
Tff7b72return Te6edf3lenTb4b4b4;
Tb4b4b4}
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657bool Td2a8ffSerialEthernetInterface::isWriteBusyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffSerialEthernetInterface::onClientConnectedTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3_state Tff7b72= Te6edf3RECV_STATE_IDLETb4b4b4;
Te6edf3_frame_len Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_rx_len Tff7b72= T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657size_t Td2a8ffSerialEthernetInterface::checkRecvFrameTb4b4b4(Tffa657uint8_t Te6edf3destTb4b4b4[Tb4b4b4]Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3isConnectedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3send_queue_len Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{ T8b949e// first, check send queue
Te6edf3_last_write Tff7b72= Te6edf3millisTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657int Te6edf3len Tff7b72= Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3lenTb4b4b4;
Tff7b72#Tff7b72if ETHERNET_RAW_LINE
Te6edf3ETHERNET_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffTX line len=%dTa5d6ff"Tb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3clientTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3bufTb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3clientTb4b4b4.Te6edf3writeTb4b4b4(Ta5d6ff"Tffea00\rTffea00\nTa5d6ff"Tb4b4b4, T79c0ff2Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72else
Tffa657uint8_t Te6edf3pktTb4b4b4[T79c0ff3Tff7b72+Te6edf3lenTb4b4b4]Tb4b4b4; T8b949e// use same header as serial interface so client can delimit frames
Te6edf3pktTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff>Ta5d6ff'Tb4b4b4;
Te6edf3pktTb4b4b4[T79c0ff1Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3len Tff7b72& T79c0ff0xFFTb4b4b4)Tb4b4b4; T8b949e// LSB
Te6edf3pktTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72= Tb4b4b4(Te6edf3len Tff7b72>Tff7b72> T79c0ff8Tb4b4b4)Tb4b4b4; T8b949e// MSB
Te6edf3memcpyTb4b4b4(Tff7b72&Te6edf3pktTb4b4b4[T79c0ff3Tb4b4b4]Tb4b4b4, Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3bufTb4b4b4, Te6edf3send_queueTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4.Te6edf3lenTb4b4b4)Tb4b4b4;
Te6edf3ETHERNET_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffSending frame len=%dTa5d6ff"Tb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72if ETHERNET_DEBUG_LOGGING && ARDUINO
Te6edf3ETHERNET_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffTX frame len=%dTa5d6ff"Tb4b4b4, Te6edf3lenTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3writeTb4b4b4(Te6edf3pktTb4b4b4, T79c0ff3 Tff7b72+ Te6edf3lenTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3send_queue_lenTff7b72-Tff7b72-Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3send_queue_lenTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{ T8b949e// delete top item from queue
Te6edf3send_queueTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Te6edf3send_queueTb4b4b4[Te6edf3i Tff7b72+ T79c0ff1Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72while Tb4b4b4(Te6edf3availableTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3c Tff7b72= Te6edf3readTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72< T79c0ff0Tb4b4b4) Tff7b72breakTb4b4b4;
Tff7b72#Tff7b72if ETHERNET_RAW_LINE
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff\rTa5d6ff' Tff7b72|Tff7b72| Te6edf3c Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff\nTa5d6ff'Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_rx_len Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tffa657uint16_t Te6edf3out_len Tff7b72= Te6edf3_rx_lenTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3out_len Tff7b72> Te6edf3MAX_FRAME_SIZETb4b4b4) Te6edf3out_len Tff7b72= Te6edf3MAX_FRAME_SIZETb4b4b4;
Te6edf3memcpyTb4b4b4(Te6edf3destTb4b4b4, Te6edf3_rx_bufTb4b4b4, Te6edf3out_lenTb4b4b4)Tb4b4b4;
Te6edf3_rx_len Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72return Te6edf3out_lenTb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_rx_len Tff7b72< Te6edf3MAX_FRAME_SIZETb4b4b4) Tb4b4b4{
Te6edf3_rx_bufTb4b4b4[Te6edf3_rx_lenTb4b4b4] Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3cTb4b4b4;
Te6edf3_rx_lenTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
Tff7b72switch Tb4b4b4(Te6edf3_stateTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72RECV_STATE_IDLETb4b4b4:
Tff7b72if Tb4b4b4(Te6edf3c Tff7b72=Tff7b72= Ta5d6ff'Ta5d6ff<Ta5d6ff'Tb4b4b4) Tb4b4b4{
Te6edf3_state Tff7b72= Te6edf3RECV_STATE_HDR_FOUNDTb4b4b4;
Tb4b4b4}
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RECV_STATE_HDR_FOUNDTb4b4b4:
Te6edf3_frame_len Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3cTb4b4b4;
Te6edf3_state Tff7b72= Te6edf3RECV_STATE_LEN1_FOUNDTb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RECV_STATE_LEN1_FOUNDTb4b4b4:
Te6edf3_frame_len Tff7b72|Tff7b72= Tb4b4b4(Tb4b4b4(Tffa657uint16_tTb4b4b4)Te6edf3cTb4b4b4) Tff7b72<Tff7b72< T79c0ff8Tb4b4b4;
Te6edf3_rx_len Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3_state Tff7b72= Te6edf3_frame_len Tff7b72> T79c0ff0 Tff7b72? Te6edf3RECV_STATE_LEN2_FOUND Tff7b72: Te6edf3RECV_STATE_IDLETb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Tff7b72if Tb4b4b4(Te6edf3_rx_len Tff7b72< Te6edf3MAX_FRAME_SIZETb4b4b4) Tb4b4b4{
Te6edf3_rx_bufTb4b4b4[Te6edf3_rx_lenTb4b4b4] Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3cTb4b4b4;
Tb4b4b4}
Te6edf3_rx_lenTff7b72+Tff7b72+Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_rx_len Tff7b72>Tff7b72= Te6edf3_frame_lenTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_frame_len Tff7b72> Te6edf3MAX_FRAME_SIZETb4b4b4) Tb4b4b4{
Te6edf3_frame_len Tff7b72= Te6edf3MAX_FRAME_SIZETb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if ETHERNET_DEBUG_LOGGING && ARDUINO
Te6edf3ETHERNET_DEBUG_PRINTLNTb4b4b4(Ta5d6ff"Ta5d6ffRX frame len=%dTa5d6ff"Tb4b4b4, Te6edf3_frame_lenTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Te6edf3memcpyTb4b4b4(Te6edf3destTb4b4b4, Te6edf3_rx_bufTb4b4b4, Te6edf3_frame_lenTb4b4b4)Tb4b4b4;
Te6edf3_state Tff7b72= Te6edf3RECV_STATE_IDLETb4b4b4;
Tff7b72return Te6edf3_frame_lenTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.06s